package com.f21.f21assessoria.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.faces.model.ListDataModel;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;
import javax.inject.Inject;

import org.apache.log4j.Logger;
import org.primefaces.event.SelectEvent;
import org.springframework.beans.factory.annotation.Autowired;

import com.f21.f21assessoria.converter.ConverterPerfis;
import com.f21.f21assessoria.dao.TurmaDao;
import com.f21.f21assessoria.dao.TurmaDaoImp;
import com.f21.f21assessoria.dao.UsuarioDao;
import com.f21.f21assessoria.dao.UsuarioDaoImp;
import com.f21.f21assessoria.enums.Perfis;
import com.f21.f21assessoria.enums.Status;
import com.f21.f21assessoria.enums.TipoTelefone;
import com.f21.f21assessoria.model.cadastro.*;
import com.f21.f21assessoria.service.UsuarioService;
import com.f21.f21assessoria.util.JsfUtil;
import com.f21.f21assessoria.util.UsuarioModal;
import com.f21.f21assessoria.util.UtilMessage;

public class UsuarioController implements Serializable {

	private static final long serialVersionUID = 1L;

	private static final Logger logger = Logger
			.getLogger(UsuarioController.class);

	@Autowired
	private UsuarioService service;
	
	
	private Usuario user;

	private List<Usuario> filtedUser;
	private Usuario selectedUser;

	private Perfis[] perfisSelecionados;
	
	public UsuarioController() {
		Usuario user;
		user = (Usuario) JsfUtil.getSessionValue("usuario");
		if (user == null)
			this.user = new Usuario();
		else {
			this.user = user;
			if (user.getPerfis() != null && !user.getPerfis().isEmpty())
				this.setPerfisSelecionados(user.getPerfis());
			JsfUtil.removeFromSession("usuario");			
		}
	}

	public UsuarioService getService() {
		return service;
	}

	public void setService(UsuarioService service) {
		this.service = service;
	}

	public Usuario getUser() {
		return user;
	}

	public void setUser(Usuario user) {
		this.user = user;
	}

	public void addTel() {
		service.novoTel(this.user);
	}

	public UsuarioModal getListarUsuarios() {
		UsuarioModal um =  new UsuarioModal(service.listarTodos());
		return um;
	}

	public List<Usuario> getFiltedUser() {
		return filtedUser;
	}

	public void setFiltedUser(List<Usuario> filtedUser) {
		this.filtedUser = filtedUser;
	}

	public void setSelectedUser(Usuario selectedUser) {
		this.selectedUser = selectedUser;
	}

	public Usuario getSelectedUser() {
		return selectedUser;
	}

	public void selecionou(SelectEvent evento) {
		this.selectedUser = (Usuario) evento.getObject();
	}

	public SelectItem[] getListaStatus() {
		return ConverterPerfis.getListaValores(Status.values());
	}

	public SelectItem[] getPerfis() {
		return ConverterPerfis.getListaValores(Perfis.values());
	}

	public SelectItem[] getFilterStatus() {
		return ConverterPerfis.getListaValores(Status.values(), "Todos");
	}

	public SelectItem[] getFilterPerfis() {
		return ConverterPerfis.getListaValores(Perfis.values(), "Todos");
	}
	
	public SelectItem[] getListTipoTelefone() {
		return ConverterPerfis.getListaValores(TipoTelefone.values());
	}

	public Perfis[] getPerfisSelecionados() {
		return perfisSelecionados;
	}

	public void setPerfisSelecionados(Perfis[] perfisSelecionados) {
		this.perfisSelecionados = perfisSelecionados;
	}

	public void setPerfisSelecionados(List<Perfis> perfisSelecionados) {
		Perfis[] perfis = new Perfis[perfisSelecionados.size()];
		for (int i = 0; i < perfisSelecionados.size(); i++)
			perfis[i] = perfisSelecionados.get(i);
		this.perfisSelecionados = perfis;
	}

	public String salvar() {
		this.user.setPerfis(getPerfisSelecionados());
		service.salvar(this.user);
	
		String parm[] = { user.getNome() };
		UtilMessage.addInfoMessageBundle("msg.form.info.user.salvo", parm);
		return "listauser";
	}

	public void excluir(Usuario user) {
		System.out.println("exluindo " + user.getNome());
		service.excluir(user);
	}

	public void excluir() {
		System.out.println("exluindo " + selectedUser.getNome());
		service.excluir(this.getSelectedUser());
	}

	public String editar() {
		logger.info("Editando usuario");
		JsfUtil.setSessionValue("usuario", this.selectedUser);
	
		return "edituser";
	}

}
